package edu.dayu.demo2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 给你两个下标从 0 开始的字符串 s 和 target 。你可以从 s 取出一些字符并将其重排，得到若干新的字符串。
 * 输入：s = "ilovecodingonleetcode", target = "code"
 * 输出：2
 * 解释：
 * 对于 "code" 的第 1 个副本，选取下标为 4 、5 、6 和 7 的字符。
 * 对于 "code" 的第 2 个副本，选取下标为 17 、18 、19 和 20 的字符。
 * 形成的字符串分别是 "ecod" 和 "code" ，都可以重排为 "code" 。
 * 可以形成最多 2 个 "code" 的副本，所以返回 2 。
 *
 * 思路：用 hash 表对 s 进行插入，然后统计个数即可，最后循环 target。比较暴力。
 */
public class 重排字符形成目标字符串 {
    public static void main(String[] args) {
        String s = "ilovecodingonleetcode", target = "code";
        System.out.println(rearrangeCharacters(s,target));
    }

    public static int rearrangeCharacters(String s, String target) {
        HashMap<Character, Integer> map = new HashMap<>();
        HashMap<Character, Integer> targetMap = new HashMap<>();
        int len = Math.max(s.length(),target.length());
        for (int i = 0; i < len; i++) {
            if (i<s.length()) {
                char c = s.charAt(i);
                Integer integer = map.get(c) == null ? 0 : map.get(c);
                map.put(c, integer + 1);
            }
            if (i<target.length()){
                char c= target.charAt(i);
                Integer integer = targetMap.get(c)==null?0:targetMap.get(c);
                targetMap.put(c,integer+1);
            }
        }
        char c = target.charAt(0);
        Integer tem = map.get(c) == null ? 0 : map.get(c);
        int min = tem/targetMap.get(c);
        for (int i = 1; i < target.length(); i++) {
            char c1 = target.charAt(i);
            Integer temp = map.get(c1) == null ? 0 : map.get(c1);
            Integer integer = temp/targetMap.get(c1);
            if (integer<min)
                min = integer;
        }
        return min;
    }
}
